//package com.auth.service.impl;
//
//import com.alibaba.cloud.commons.lang.StringUtils;
//import com.common.constant.RedisConstant;
//import com.system.api.SystemFeignClient;
//import com.system.pojo.Role;
//import lombok.RequiredArgsConstructor;
//import org.springframework.data.redis.core.RedisTemplate;
//import org.springframework.stereotype.Service;
//
//import javax.annotation.PostConstruct;
//import java.util.*;
//
///**
// * 资源与角色匹配关系管理业务类
// *
// * author wangbaohai
// */
//@Service
//@RequiredArgsConstructor
//public class ResourceServiceImpl {
//    private Map<String, Set<String>> resourceRolesMap;
//    private final RedisTemplate<String,Object> redisTemplate;
//    private final SystemFeignClient systemFeignClient;
//
//    @PostConstruct
//    public void initData() {
//        resourceRolesMap = new TreeMap<>();
//
//        // 寻找菜单对应所有角色
//        systemFeignClient.getMenus().getData().stream().forEach(menu -> {
//            Set<String> roleNameSet = new HashSet<>();
//            // 查找角色-菜单关系
//            systemFeignClient.getRoleMenus(menu.getId()).getData()
//                    .stream().forEach(roleMenu -> {
//                Role role = systemFeignClient.getRoles(roleMenu.getRoleId()).getData();
//                if (null != role && StringUtils.isNotEmpty(role.getRoleName())) {
//                    roleNameSet.add(role.getRoleName());
//                }
//            });
//            if (StringUtils.isNotEmpty(menu.getPermission())
//                    && !roleNameSet.isEmpty()) {
//                for (String permission : menu.getPermission().split(";")) {
//                    Set<String> menuRoleNameSet = resourceRolesMap.get(permission);
//                    if (Objects.nonNull(menuRoleNameSet)){
//                        roleNameSet.addAll(menuRoleNameSet);
//                    }
//                    resourceRolesMap.put(permission, roleNameSet);
//                }
//            }
//        });
//
//        systemFeignClient.getPermissions().getData().stream().forEach(permission ->{
//            Set<String> roleNameSet = new HashSet<>();
//            // 查找角色-菜单关系
//            systemFeignClient.getRolePermissions(permission.getId()).getData()
//                    .stream().forEach(roleMenu -> {
//                        Role role = systemFeignClient.getRoles(roleMenu.getRoleId()).getData();
//                        if (null != role && StringUtils.isNotEmpty(role.getRoleName())) {
//                            roleNameSet.add(role.getRoleName());
//                        }
//                    });
//            if (StringUtils.isNotEmpty(permission.getUrlPerm())
//                    && !roleNameSet.isEmpty()) {
//                for (String urlPerm : permission.getUrlPerm().split(";")) {
//                    Set<String> menuRoleNameSet = resourceRolesMap.get(urlPerm);
//                    if (Objects.nonNull(menuRoleNameSet)){
//                        roleNameSet.addAll(menuRoleNameSet);
//                    }
//                    resourceRolesMap.put(urlPerm, roleNameSet);
//                }
//            }
//        });
//
//        redisTemplate.delete(RedisConstant.RESOURCE_ROLES_MAP);
//        redisTemplate.opsForHash().putAll(RedisConstant.RESOURCE_ROLES_MAP, resourceRolesMap);
//    }
//}
